/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package alex;

import TablaDeSimbolos.MEPaHandler;
import alex.Buffer.ExcepcionArchivoNoExiste;
//import java.io.*;

/**
 *
 * @author Mariano
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        AsinTcore sint;
        String archivoDeSalida="salida.mep";
        if (args.length==1){
            archivoDeSalida= "salida.mep";
        }
        else if(args.length>=2){
            archivoDeSalida= args[1];
        }
        MEPaHandler manejadorDeSalida = new MEPaHandler(archivoDeSalida);

        try{
            try {               
                sint = new AsinTcore(args[0], manejadorDeSalida);
                sint.analizar();
                System.out.println("###############################################");
                System.out.println("# Análisis sintáctico concluído correctamente #");
                System.out.println("###############################################");
                
            } catch (ExcepcionArchivoNoExiste ex) {
                System.out.println(ex.getMessage());
            }
            catch (AleXcore.ExcepcionCaracterInvalido e){
            System.out.println("\nSe encontro un caracter inválido en la linea " + e.getMessage() + " ... Se aborto el proceso de compilacion" /*analisis lexico"*/);
            }
            catch (AleXcore.ExcepcionComentarioSinCerrar e){
            System.out.println("\nSe encontro un comentario sin cerrar en la linea " + e.getMessage() + " ... Se aborto el proceso de compilacion" /*analisis lexico"*/);
            }
            catch (AleXcore.ExcepcionIdentificadorInvalido e){
                System.out.println("\nSe encontro un identificador inválido en la linea " + e.getMessage() + " ... Se aborto el proceso de compilacion" /*analisis lexico"*/);
            }
            catch (AleXcore.ExcepcionComentarioCerrado e){
                System.out.println("\nSe encontro cierre de comentario sin apertura en la linea " + e.getMessage() + " ... Se aborto el proceso de compilacion" /*analisis lexico"*/);
            }
            catch (AsinTcore.ExcepcionErrorSintactico e){
                System.out.println("\n" + "ERROR SINTACTICO: " + e.getMessage() + " ... Se aborto el proceso de compilacion" /*  el analisis sintactico"*/);
            }
            catch (AsinTcore.ExcepcionErrorSemantico e){
                System.out.println("\n" + "ERROR SEMANTICO: " + e.getMessage() + " ... Se aborto el proceso de compilacion"/*el analisis sintactico"*/);
            }

            
        }
        catch (java.lang.ArrayIndexOutOfBoundsException e){
            System.out.println("\nError: Parametros insuficientes para la ejecucion del analizador sintáctico\n");
            System.out.println("Para la ejecucion del programa:");
            System.out.println("<nombre del programa><archivo de entrada>[<archivo de salida>]");
        }

        manejadorDeSalida.cerrar();
    }


   
}